<?php
/**
 * 常用状态码
 *
 * @author dior <diaoxingkwan@vip.qq.com>
 *
 * @date 2021/05/28
 */

namespace app\common\constants;


class ReturnCodeConstants
{

    //正确返回码
    const SUCCESS_CODE = 0;
    //默认错误返回码
    const DEFAULT_ERROR_CODE = 1;

    /**
     * 40001-40099（请求参数错误）前缀：C_P，CLIENT_PARAM
     */
    const C_P_ERROR = 40000;//请求参数有误
    const C_P_VERIFY_FAIL = 40001;//请求参数校验错误

    /**
     * 40101-40199（授权错误）前缀：C_A，CLIENT_AUTHORIZATION
     */
    const C_A_TOKEN_NOT_FOUND = 40101;//token不存在
    const C_A_TOKEN_INVALID = 40102;//token无效
    const C_A_TOKEN_OVERDUE = 40103;//token已过期
    const C_A_TOKEN_VERIFY_FAIL = 40104;//token验证失败
    const C_A_AUTH_VERIFY_FAIL = 40105;//权限不足

    const C_A_WX_UN_INFO = 40110;//微信未授权用户信息
    const C_A_WX_UN_PHONE = 40111;//微信未授权手机号

    /**
     * 40301-40399（请求限制）前缀：C，CLIENT
     */
    const C_LIMIT_ACCESS = 40301;//访问过于频繁

    /**
     * 40401-40499（方法，路由，资源不存在错误）前缀：C，CLIENT
     */
    const C_NOT_FOUND_METHOD = 40401;//未找到处理方法
    const C_NOT_FOUND_ROUTE = 40402;//未找到路由


    const S_ERROR = 50000;//服务器错误

    /**
     * 50001-50999（系统内部层面的错误）数据验证错误
     */
    const S_FILE_UPLOAD_FAIL = 50001;//上传失败

    const S_ERROR_DATA_NOT_FOUND = 50002;//数据不存在
    const S_ERROR_STATUS_ERROR = 50003;//状态异常
    const S_ERROR_OVER_LIMIT = 50004;//数量超过最大限定数量
    const S_ERROR_ACCOUNT_VERIFY_FAIL = 50005;//帐号密码错误
    const S_ERROR_DATA_VERIFY_FAIL = 50006;//数据校验失败
    const S_ERROR_VERIFY_STOCK_FAIL = 50007;//库存不足
    const S_ERROR_WX_USER_UNAUTHORIZED = 50008;//微信用户信息未授权
    const S_ERROR_WX_USER_NOT_MOBILE = 50009;//用户尚未授权手机号

    /**
     * 51000-51999（数据库层面的错误码）
     */
    const S_DB_CREATE_FAIL = 51001;//插入数据失败
    const S_DB_UPDATE_FAIL = 51002;//更新数据失败
    const S_DB_DELETE_FAIL = 51003;//删除数据失败
    const S_DB_DATA_NOT_FOUND = 51004;//数据不存在

    /*/
     * 52000-52999（请求第三方层面的错误码）
     */


    //状态码对应的文字内容
    const CODE_MESSAGE = [
        self::SUCCESS_CODE => 'success',
        self::DEFAULT_ERROR_CODE => 'failure',

        self::C_P_ERROR => '请求参数有误',
        self::C_P_VERIFY_FAIL => '请求参数校验错误',
        self::C_A_TOKEN_NOT_FOUND => 'token不存在',
        self::C_A_TOKEN_INVALID => 'token无效',
        self::C_A_TOKEN_OVERDUE => 'token已过期',
        self::C_A_TOKEN_VERIFY_FAIL => 'token验证失败',
        self::C_A_AUTH_VERIFY_FAIL => '权限不足',
        self::C_A_WX_UN_INFO => '微信未授权用户信息',
        self::C_A_WX_UN_PHONE => '微信未授权手机号',
        self::C_LIMIT_ACCESS => '访问过于频繁',
        self::C_NOT_FOUND_METHOD => '未找到处理方法',
        self::C_NOT_FOUND_ROUTE => '未找到路由',


        self::S_ERROR => '服务器错误',
        self::S_FILE_UPLOAD_FAIL => '上传失败',
        self::S_ERROR_DATA_NOT_FOUND => '数据不存在',
        self::S_ERROR_STATUS_ERROR => '状态异常',
        self::S_ERROR_OVER_LIMIT => '数量超过最大限定数量',
        self::S_ERROR_ACCOUNT_VERIFY_FAIL => '帐号密码错误',
        self::S_ERROR_DATA_VERIFY_FAIL => '数据校验失败',
        self::S_ERROR_VERIFY_STOCK_FAIL => '库存不足',
        self::S_ERROR_WX_USER_UNAUTHORIZED => '微信用户信息未授权',
        self::S_ERROR_WX_USER_NOT_MOBILE => '用户尚未授权手机号',

        self::S_DB_CREATE_FAIL => '数据创建失败',
        self::S_DB_UPDATE_FAIL => '数据更新失败',
        self::S_DB_DELETE_FAIL => '数据删除失败',
        self::S_DB_DATA_NOT_FOUND => '数据获取失败',


    ];

    //状态码对应的http code
    const CODE_HTTP_CODE = [
        self::SUCCESS_CODE => 200,
        self::S_FILE_UPLOAD_FAIL => 500,

        self::DEFAULT_ERROR_CODE => 500,
    ];

    /**
     * 获取错误消息
     * @param int $code 状态码
     * @return string
     */
    public static function getCodeMessage(int $code): string
    {
        return self::CODE_MESSAGE[$code] ?? '';
    }

    /**
     * 获取http状态码
     * @param int $code 状态码
     * @return int
     */
    public static function getHttpCode(int $code): int
    {
        return self::CODE_HTTP_CODE[$code] ?? 200;
    }
}